/**
 * defines all possible loading operations
 * @author Lukas Koell
 * @author David Medenjak
 * @author Johannes Riedmann
 */

public interface Loader {

    /**
     * Adds a trail to the object.
     * @param anhaenger trail to add.
     * @return true if it succeeded, false if not.
     */
    public boolean load(Trail anhaenger);

    /**
     * Calls the animals setCompartment() method to add itself.
     * @param animal Animal to add.
     * @return true if it succeeded, false if not.
     */
    public boolean load(Animal animal);

    /**
     * Gets an animal out of the Loader.
     * @param hitchNr Number of the hitch to unload.
     * @return Trail it unloaded.
     */
    public Trail unload(int hitchNr);

    /**
     * Unloads an animal.
     * @param compartment Compartment it's in.
     * @return Animal that was unloaded.
     */
    public Animal unload(Compartment compartment);
}
